package br.com.imob.dao;

import br.com.imob.modelo.Situacao;

import java.util.List;

/** @user Gilton Nascimento
 *  @since 12:01:13 31/01/2011 2011
 *  @version 
 */

public class SituacaoDao extends GenericDao {

	
	public SituacaoDao() {  }
	
	public Integer adicionarSituacao(Situacao situacao) {
		saveOrUpdatePojo(situacao);
		return situacao.getSituacaoId();
	}
	
	public void removerSituacao(Situacao situacao) {
		removerPojo(situacao);
	}

	/* Precisa definir o ID */
	public void atualizarSituacao(Situacao recupera) {
		saveOrUpdatePojo(recupera);
	}
	
	
	/**
	 * Editar um Situacao
	 * @param String oldSituacao
	 * @param String newSituacao
	 */
	public void atualizarSituacao(String oldSituacao, String newSituacao ) {
		if ( ( !"".equals(oldSituacao) && oldSituacao != null )
			&& ( !"".equals(newSituacao) && newSituacao != null ) ) 
			atualizarSituacao( getSituacaoQNamed(oldSituacao), new Situacao(newSituacao) );
	}
	
	
	/* Precisa definir qual atribuito sera a chave a identificar 
	 * a tupla a ser alterada */
	public void atualizarSituacao(Situacao recuperar, Situacao alterar) {
		recuperar = retriveSituacao(recuperar);
		
		if(alterar.getSituacao() != null)
			recuperar.setSituacao(alterar.getSituacao());
		
		saveOrUpdatePojo(recuperar);
	}
	
//	Artificio para Recuperar a Tupla de Situacao
	protected Situacao retriveSituacao(Situacao recuperar) {
		if( recuperar.getSituacaoId() == null )
			return getSituacaoQNamed( recuperar.getSituacao() );
		if( recuperar.getSituacaoId() == null && recuperar.getSituacao() == null )
			return getSituacaoQNamed( recuperar.getSituacaoDesc() );
		else
			return getSituacao( recuperar.getSituacaoId() );
	}
	
	
//	Consultas
	public Situacao getSituacao(Integer key) {
		return getPojoByID(Situacao.class, key);
	}
	public Situacao getSituacaoByQuery(String query, Object...params) {
		return getPojoByQry(query, params);
	}
	public Situacao getSituacaoQNamed(String fltrSituacao) {
		return getPojoByQNamed("Situacao.findBySituacao", fltrSituacao);
	}
	public Situacao getSituacaoQNamedDesc(String fltrDesc) {
		return getPojoByQNamed("Situacao.findBySituacaoDesc", fltrDesc);
	}
	
	public List<Situacao> getSituacoes() {
		return (List<Situacao>) getALL(Situacao.class);
	}
	public List<Situacao> getSituacoesQNamedPRX(String fltrSituacao) {
		return getListByQNamedPRX("Situacao.findLikeBySituacao", fltrSituacao);
	}
	public List<Situacao> getSituacoesQNamedDescPRX(String fltrDesc) {
		return getListByQNamedPRX("Situacao.findLikeBySituacaoDesc", fltrDesc);
	}
	public List<Situacao> getSituacoesByQuery(String query, Object...params) {
		return getListByQry(query, params);
	}
	
}